package com.gonsin.gview.model;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.gonsin.gview.annotations.GContext;
import com.gonsin.gview.model.i18n.TCloneable;
import com.gonsin.i18n.logic.T;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;

import java.util.List;

@Data
@ApiModel("按钮的描述")
public class GButtonModel implements TCloneable<GButtonModel> {

    @ApiModelProperty("按钮显示的名字")
    private String name;

    @ApiModelProperty("按钮的图标")
    private String icon;

    @ApiModelProperty("按钮的唯一值")
    private String buttonId;

    @ApiModelProperty("文本的颜色")
    private String textColor;

    @ApiModelProperty("按钮的类型 有 default/primary/success/info/warning/danger")
    private String buttonType;

    @ApiModelProperty("按钮的形状 有 default/plain/round/circle")
    private String buttonStyle;

    @ApiModelProperty("涉及到跳转传参时候会用到")
    private List<GPropModel> props;


    @ApiModelProperty("点击按钮需要执行的内容，类型有 NONE\\LINK\\PAGE\\UPLOAD_FILE\\DOWNLOAD\\BATCH\\CLOSE_DIALOG\\OK_AND_CLOSE_DIALOG\\OPEN_DIALOG\\CONFIRM")
    private String action;

    @ApiModelProperty("点击按钮访问的连接，action=LINK有效")
    private String link;



    // 以下为 action = view时有效
    @ApiModelProperty("点击按钮时跳转的url，action=view有效")
    private String view;



    // 以下为 action = open_dialog 时有效
//    @ApiModelProperty("通过接口访问获取dialog的内容，并用窗口模式打开页面")
//    private String dialogBoard = "blank";


    // 以下为 action = download时有效
    @ApiModelProperty("文件下载路径")
    private String downloadUrl;

    @ApiModelProperty("支持上传的文件格式")
    private String accept;

    @ApiModelProperty("文件下载路径")
    private int limit;

    @ApiModelProperty("根据条件隐藏或显示")
    private String showIf;

    @ApiModelProperty("根据条件禁用")
    private String disableIf;

    @ApiModelProperty("弹出确认框的提示语，action = Confirm时有效")
    private String confirmMessage;

    @ApiModelProperty("可支持的文件上传类型，如果是file，表示只支持文件，" +
            "如果是path，表示支持文件和文件夹")
    private String fileUploadType;

    @ApiModelProperty("是否为外部链接")
    private boolean outLink;

    /**
     * 2024/6/24 新增，用于判断按钮权限，确定是否显示
     */
    @ApiModelProperty("按钮包含的权限")
    private String[] permission;

    @JsonIgnore
    private transient GContext context;

    @Override
    public GButtonModel tClone() {
        GButtonModel model = new GButtonModel();
        BeanUtil.copyProperties(this, model, CopyOptions.create().setIgnoreNullValue(true));
        if(StringUtils.isNotEmpty(name)){
            model.setName(T.t(name));
        }
        if(StringUtils.isNotEmpty(confirmMessage)){
            model.setConfirmMessage(T.t(confirmMessage));
        }
        return model;
    }
}
